#include "extcontrol.h"

ExtControl::ExtControl(QObject *parent) : QObject(parent) {
}

ExtControl::~ExtControl() {
  GPIOControl::unexp(GPIO_NR_LED1);
  GPIOControl::unexp(GPIO_NR_LED2);
  GPIOControl::unexp(GPIO_NR_LED3);
  GPIOControl::unexp(GPIO_NR_LED4);
  GPIOControl::unexp(GPIO_NR_LED5);
}

void ExtControl::initGPIO() {
  GPIOControl::exp(GPIO_NR_LED1);
  GPIOControl::exp(GPIO_NR_LED2);
  GPIOControl::exp(GPIO_NR_LED3);
  GPIOControl::exp(GPIO_NR_LED4);
  GPIOControl::exp(GPIO_NR_LED5);
  GPIOControl::exp(GPIO_NR_EXT_PWR_ON);
  GPIOControl::exp(GPIO_NR_ENABLE_EXT_I2C);

  GPIOControl::setDirection(GPIO_NR_LED1,OUTPUT_PIN);
  GPIOControl::setDirection(GPIO_NR_LED2,OUTPUT_PIN);
  GPIOControl::setDirection(GPIO_NR_LED3,OUTPUT_PIN);
  GPIOControl::setDirection(GPIO_NR_LED4,OUTPUT_PIN);
  GPIOControl::setDirection(GPIO_NR_LED5,OUTPUT_PIN);
  GPIOControl::setDirection(GPIO_NR_EXT_PWR_ON,OUTPUT_PIN);
  GPIOControl::setDirection(GPIO_NR_ENABLE_EXT_I2C,OUTPUT_PIN);


  GPIOControl::setValue(GPIO_NR_LED1,LOW);
  GPIOControl::setValue(GPIO_NR_LED2,LOW);
  GPIOControl::setValue(GPIO_NR_LED3,LOW);
  GPIOControl::setValue(GPIO_NR_LED4,LOW);
  GPIOControl::setValue(GPIO_NR_LED5,LOW);
  GPIOControl::setValue(GPIO_NR_EXT_PWR_ON,LOW);
  GPIOControl::setValue(GPIO_NR_ENABLE_EXT_I2C,LOW);
}

void ExtControl::setLED1On() {
  GPIOControl::setValue(GPIO_NR_LED1,HIGH);
}

void ExtControl::setLED1Off() {
  GPIOControl::setValue(GPIO_NR_LED1,LOW);
}

void ExtControl::setLED2On() {
  GPIOControl::setValue(GPIO_NR_LED2,HIGH);
}

void ExtControl::setLED2Off() {
  GPIOControl::setValue(GPIO_NR_LED2,LOW);
}

void ExtControl::setLED3On() {
  GPIOControl::setValue(GPIO_NR_LED3,HIGH);
}

void ExtControl::setLED3Off() {
  GPIOControl::setValue(GPIO_NR_LED3,LOW);
}

void ExtControl::setLED4On() {
  GPIOControl::setValue(GPIO_NR_LED4,HIGH);
}

void ExtControl::setLED4Off() {
  GPIOControl::setValue(GPIO_NR_LED4,LOW);
}

void ExtControl::setLED5On() {
  GPIOControl::setValue(GPIO_NR_LED5,HIGH);
}

void ExtControl::setLED5Off() {
  GPIOControl::setValue(GPIO_NR_LED5,LOW);
}

void ExtControl::blinkTimerTimeout() {
  qint16 ret_val=0;

  //Read the current state of the LED
  GPIOControl::getValue(GPIO_NR_LED1,&ret_val);

  if (ret_val == LOW)
    setLED1On();
  else
    setLED1Off();
}

void ExtControl::setExtI2COn() {
  GPIOControl::setValue(GPIO_NR_ENABLE_EXT_I2C,HIGH);
}

void ExtControl::setExtI2COff() {
  GPIOControl::setValue(GPIO_NR_ENABLE_EXT_I2C,LOW);
}

void ExtControl::setExtPowerOn() {
  GPIOControl::setValue(GPIO_NR_EXT_PWR_ON,HIGH);
}

void ExtControl::setExtPowerOff() {
  GPIOControl::setValue(GPIO_NR_EXT_PWR_ON,LOW);
}
